现在系统功能趋于稳定,想着接入单元测试使用一下。尝试着为公共组件和公共方法编写覆盖全面的单元测试。
Jest
vue-cli 自带Jest,开箱即用。在根目录中创建一个名为 jest.config.js 的配置文件。配置文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| module.exports = { moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], transform: { '^.+\\.vue$': 'vue-jest', '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', '^.+\\.jsx?$': 'babel-jest' }, transformIgnorePatterns: ['/node_modules/'], snapshotSerializers: ['jest-serializer-vue'], testMatch: [ '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' ], setupFiles: ['./tests/setup.js'], collectCoverage: true, coverageReporters: ['html', 'lcov', 'text-summary'], coverageDirectory: './test/coverage', collectCoverageFrom: ['components/**/*.vue'] }
|
安装
语法
断言、异步代码测试、Mock 函数、快照参考文档
异步获取数据肯定是一个常见场景了。异步代码通常会有两种写法,分别为:
在测试异步代码的时候,通常返回的数据是不确定的,因此我们只需要测试异步代码是否正常返回数据即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| test('fetch success', done => { fetch(data => { expect(data.success).toBe(true) done() }) })
test('fetch success', () => { return fetch().then(data => { expect(data.success).toBe(true) }) })
|
实践
单元测试case部署在tests/unit
文件夹中,使用Jest
编写。可以测试引入的公共方法,也可以测试一个单文件组件。建议按照代码组织结构来编写对应的单元测试case。
使用npm run unit
来运行单元测试,测试结果会在命令行中显示。在构建测试环境的时候会自动运行单元测试,如果单元测试存在未通过的case,则构建会失败并终止。构建beta环境和生产环境暂时不会运行单元测试。
一个简单的关于为数字加入千位分隔符的方法的单元测试:
1 2 3 4 5 6 7 8 9
| describe('Utils suits', function () { it('should add commas for numbers', function () { let fn = Utils.addNumberCommas expect(fn(123)).toBe('123') expect(fn(12345)).toBe('12,345') expect(fn(1234567.89)).toBe('1,234,567.89') expect(fn(-1234567.89)).toBe('-1,234,567.89') }) })
|
输出示例:
参考链接: